/**
 * 
 */
package org.jenkon.map;

import java.util.Map;

import org.jenkon.decorator.MapDecorator;
import org.jenkon.filter.Filter;
import org.jenkon.filter.Filterable;
import org.jenkon.utils.ClassUtils;

/**
 * @author Jens Konopka
 * 
 */
public class FilterableMap<K, V> extends MapDecorator<K, V> implements Filterable<Map<K, V>, V> {

	/**
	 * @param map
	 */
	public FilterableMap(final Map<K, V> map) {
		super(map);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.jenkon.lang.filter.Filterable#filter(org.jenkon.lang.filter.Filter)
	 */
	public Map<K, V> filter(final Filter<V> filter) {
		final Map<K, V> result = ClassUtils.newInstance(map);
		for (final Map.Entry<K, V> entry : map.entrySet()) {
			if (filter.accept(entry.getValue())) {
				result.put(entry.getKey(), entry.getValue());
			}
		}
		return result;
	}

}
